#!/usr/bin/env python
"""
数据库初始化脚本
快速初始化系统所需的数据库和基础数据
"""
import os
import subprocess
import sys
import time
import shutil

def run_command(command):
    """运行命令并打印输出"""
    print(f"执行命令: {command}")
    result = subprocess.run(command, shell=True, capture_output=True, text=True)
    
    if result.stdout:
        print(result.stdout)
    
    if result.stderr:
        print(f"错误: {result.stderr}", file=sys.stderr)
    
    return result.returncode == 0

def init_database():
    """初始化数据库"""
    print("="*50)
    print("开始初始化数据库...")
    print("="*50)
    
    # 确保Flask环境设置正确
    if 'FLASK_APP' not in os.environ:
        os.environ['FLASK_APP'] = 'run.py'
    
    # 初始化数据库表
    print("\n1. 创建数据库表...")
    if not run_command("flask init-db"):
        print("创建数据库表失败，请检查配置和连接")
        return False
    
    # 检查migrations目录是否存在
    migrations_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'migrations')
    if os.path.exists(migrations_dir):
        print("\n2. 清理已存在的迁移目录...")
        try:
            shutil.rmtree(migrations_dir)
            print(f"已删除旧的迁移目录: {migrations_dir}")
        except Exception as e:
            print(f"删除迁移目录失败: {str(e)}")
            print("请尝试手动删除migrations目录后再运行")
    
    # 初始化迁移
    print("\n3. 初始化数据库迁移...")
    if not run_command("flask db init"):
        print("初始化迁移失败，继续执行...")
    
    # 创建迁移脚本 - 修复引号问题
    print("\n4. 创建迁移脚本...")
    if not run_command('flask db migrate -m "Initial migration"'):
        print("创建迁移脚本失败，继续执行...")
    
    # 应用迁移
    print("\n5. 应用迁移...")
    if not run_command("flask db upgrade"):
        print("应用迁移失败，继续执行...")
    
    # 创建管理员账户
    print("\n6. 创建管理员账户...")
    if not run_command("flask create-admin"):
        print("创建管理员账户失败")
        return False
    
    # 填充示例数据
    print("\n7. 填充示例数据...")
    if not run_command("flask seed-db"):
        print("填充示例数据失败")
        return False
    
    print("\n="*50)
    print("数据库初始化完成！")
    print("默认管理员账户: admin / Admin123!")
    print("="*50)
    
    return True

if __name__ == "__main__":
    start_time = time.time()
    success = init_database()
    end_time = time.time()
    
    print(f"\n初始化用时: {end_time - start_time:.2f} 秒")
    
    if success:
        print("\n您现在可以运行应用:")
        print("flask run")
    else:
        print("\n初始化过程中出现错误，请检查日志")
        sys.exit(1) 